Typically, system services, including virtual machines, viewers and plug-ins, need to be installed on a device in order to be used by other objects or applications that require them. For example, Java applets run on a device that has a Java virtual machine loaded. Consequently, a device that intends to execute the Java applet will install the Java virtual machine on the device. Typically, because the virtual machine, or other system service, needs to be integrated into the device it is executing on, the installation is performed in advance of trying to download or execute applet or other application wanting to take advantage of the system service.
Some devices, particularly wireless devices, however, have a constrained environment. Memory, including secondary storage and primary for active programs and data, and processing is more scarce than on other larger computer systems. Consequently, it is advantageous to only download or install some system services, such as virtual machines, on an as needed basis. Unfortunately, on these constrained devices, system services are required to be installed or loaded into memory and take up valuable resources even when not used. Furthermore, users who want to use applications on devices that do not already have the application's supporting system services are hampered or prevented from doing so because the system services were not already installed on the device.